home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
COMMUNIC
/
H191.ZIP
/
CA29-3.EXE
/
MDMDIAG.CMD
< prev
next >
Wrap
OS/2 REXX Batch file
|
1990-10-04
|
7KB
|
232 lines
ON ESCAPE GOSUB Exit
LEGEND " Modem diagnostic"
;*** TRACE ON
;
; ----- MdmDiag: Modem diagnostic routine for COM-AND.
;
; R.McG; 8/90, Chicago
; ----------------------------------------------------------------
; Usages:
; S0 carries the original port/speed when entered
; N99,N98 contain original cursor row, col
; ----------------------------------------------------------------
;
; Initialization..
;
SAVE 0,0,"_SSIZE"-1,79 ; Save original screen
CURSOR N99,N98
CLEAR ; Clear screen
COMPARMS S0 ; Get current settings
S0 = S0(11:14) ; Make it easy
;
; Find the port to use, and take register values
;
GOSUB TestPort ; Find which ports exist
GOSUB GetPort ; Set port name we'll use (into S1)
SET PORT S1 ; Switch to desired port
COMBASE S1 N0 ; Get port base addr from str in s1
GOSUB GetRegs ; Using N0, rtn N1-N7 values
;
; Display the port/base addr
;
BOX 0,0,3,38 (default)
ATSAY 1,2 (default) "Comm setting: "*"_PARM"
STRFMT S2 "%x" N0
ATSAY 2,2 (default) "Base address: "*S2
COMVEC S1 N0
ATSAY 2,25 (default) "IRQ: "*N0
;
; Display the LCR
;
S1 = " Line Control Register "
S2 = "DLB STB STP EPS PEN STB WS1 WS0"
N8 = 40
N9 = 0
N0 = N1
GOSUB DISPREG
;
; Display the LSR
;
S1 = " Line Status Register "
S2 = " TSE THE BI FE PE OE DR "
N9 = 4
N0 = N2
GOSUB DISPREG
;
; Display the MCR
;
S1 = " Modem Control Register "
S2 = " LP OT2 OT1 RTS DTR"
N9 = 8
N0 = N3
GOSUB DISPREG
;
; Display the MSR
;
S1 = " Modem Status Register "
S2 = "RLS RI DSR CTS DRD TER DDR DCS"
N9 = 12
N0 = N4
GOSUB DISPREG
;
; Display the IIR
;
S1 = " Interrupt ID Register "
S2 = " ID2 ID1 ITP"
N9 = 16
N0 = N5
GOSUB DISPREG
;
; Display the IER
;
S1 = " Interrupt Enable Register "
S2 = " ESI ELI ETI ERI"
N9 = 20
N0 = N6
GOSUB DISPREG
;
; Display the IMR
;
S1 = " Interrupt Mask Register "
S2 = "IQ7 IQ6 IQ5 IQ4 IQ3 IQ2 IQ1 IQ0"
N8 = 0
N9 = 4
N0 = N7
GOSUB DISPREG
;
; Wait for a Keypress
;
LEGEND " Modem Diagnostic - press any key to quit"
KEYGET S1
;
; And we're done
;
Exit:
SET PORT S0 ; Restore original port
DO ; There may be multiple saves outstanding
RESTORE ; .. restore all
UNTIL FAILURE
LOCATE N99,N98
EXIT
;
; ----- Display a register's value
; S1 passed -> Legend for Box
; S2 passed -> 1st line of box display (we'll draw 2nd)
; N0 passed -> Register value
; N9 passed -> Row number of top of box
; N8 passed -> Col number of topleft of box
;
DISPREG:
BOX N9,N8,N9+3,N8+38 (default)
ATSAY N9+1,N8+2 (default) S2
ATSAY N9,N8+2 (default) S1
N10 = 128
N11 = 1
S3 = ""
WHILE N10 GT 0
IF 0 NE (N0 & N10) S3(N11:N11) = "1"
N10 = N10/2
N11 = N11+4
ENDWHILE
ATSAY N9+2,N8+2 (default) S3
RETURN
;
; ----- Get register values
; N0 passed -> Base address for port
; N1-N7 returned: register values
;
GetRegs:
INPUT N1,N0+3 ; Line control reg
INPUT N2,N0+5 ; Line status reg
INPUT N3,N0+4 ; Modem control reg
INPUT N4,N0+6 ; Modem status reg
INPUT N5,N0+2 ; Interrupt ID reg
INPUT N6,N0+1 ; Interrupt enable
INPUT N7,0x21 ; Interrupt make register (8259)
RETURN
;
; ----- Get Port name to use
; S0 passed default port name
; S1 returned: port name to be used
;
GetPort:
WOPEN 10,10,17,50 (default)
ATSAY 10,12 (default) " Modem Diag Select "
IF FLAG(0) ATSAY 11,12 (default) "1) Select COM1"
IF FLAG(1) ATSAY 12,12 (default) "2) Select COM2"
IF FLAG(2) ATSAY 13,12 (default) "3) Select COM3"
IF FLAG(3) ATSAY 14,12 (default) "4) Select COM4"
ATSAY 15,12 (default) "5) Use default (also c/r)"
ATSAY 16,12 (default) "Select from above: "
ATSAY 17,20 (default) " Press ESC to exit "
LOCATE 16,32
KEYGET S1
SWITCH S1
CASE "1"
S1 = "COM1"
ENDCASE
CASE "2"
S1 = "COM2"
ENDCASE
CASE "3"
S1 = "COM3"
ENDCASE
CASE "4"
S1 = "COM4"
ENDCASE
CASE "5" ; Default case
S1 = S0 ; .. use it
ENDCASE
CASE "0D" ; Default case
S1 = S0 ; .. use it
ENDCASE
DEFAULT
SOUND 100,100
WCLOSE ; We'll reopen above
GOTO GetPort ; .. try again
ENDCASE
ENDSWITCH
WCLOSE
RETURN
;
; ----- Test existing ports...
; S0 passed is the default port
; FLAGS 0-3 are returned t/f according to the corresponding
; port's existance
;
TestPort:
SET FLAG(0) OFF
SET FLAG(1) OFF
SET FLAG(2) OFF
SET FLAG(3) OFF
SET PORT COM1
IF "_UART" GE 0 SET FLAG(0) ON
SET PORT COM2
IF "_UART" GE 0 SET FLAG(1) ON
SET PORT COM3
IF "_UART" GE 0 SET FLAG(2) ON
SET PORT COM4
IF "_UART" GE 0 SET FLAG(3) ON
SET PORT S0 ; Restore default
RETURN
;
; ----- Subroutine: Fatal error. Open a window, and display a message
; S0 passes the error message(s)
;
Error:
WOPEN 10,10,12,70 (contrast) Err_Esc
ATSAY 10,12 (contrast) " Modem Diag Error "
ATSAY 11,12 (contrast) S0(0:55); Max msg width 55 chars
ATSAY 12,26 (contrast) " Press any key to continue "
;
; Wait a keypress
;
KEYGET S0 ; Wait for any key
WCLOSE
RETURN
;
; Escape during this screen
;
Err_Esc:
RETURN